public class Liczba
{
	private static char[] cyfry =    { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
	private int n;
	
	Liczba()
	{
		n=0;
	}
	
	Liczba(int n) throws LiczbaException
	{
		if(n<0)
			throw new LiczbaException(n + " to nieprawidlowa liczba");
		this.n = n;
	}
	
	Liczba(String n, int podstawa) throws LiczbaException
	{
		if(podstawa < 2 || podstawa > 16)
			throw new LiczbaException(podstawa + " to nieprawidlowa podstawa");
		this.n = 0;
		int pn = -1; //zmienna ktora pilnuje zakresu inta - zmiennej this.n
		int war; //wartosc aktualnego znaku
		
		for(int i=0;i<n.length();i++)
		{
			for(war=0;war<podstawa;war++) //sprawdzenie wartosci aktualnego znaku
				if(cyfry[war] == n.charAt(i)) //aktualny znak
					break;
			if(war == podstawa)
				throw new LiczbaException(n+ " to nie jest liczba w systemie o podstawie " + podstawa);
			pn = this.n;
			this.n *= podstawa; //liczenie wartosci string n
			this.n += war;
			if(this.n < pn)
				throw new LiczbaException(n + " to za dlugi ciag znakow");
		}
	}
	
	public String zapis (int podstawa) throws LiczbaException //przerobienie liczby na podana podstawe
	{
		if(podstawa < 2 || podstawa > 16)
			throw new LiczbaException("Blad");
		String wyn = new String();  //przerobiona liczba
		int wn = this.n;
		while(wn>0)
		{
			wyn = cyfry[wn%podstawa] + wyn; //doklejenie nastepnego znaku na poczatek wyniku
			wn = wn/podstawa; //przejscie do nastepnego znaku
		}
		return wyn;
	}
};

@SuppressWarnings("serial")
class LiczbaException extends Exception //klasa wyjatkow
{
	private String msg;
	public LiczbaException(String m) {msg=m;};
	public String getMessage() {return msg;};
};